home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / PInterfaces / UnicodeConverter.p < prev    next >
Encoding:
Text File  |  1998-08-17  |  11.2 KB  |  236 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        UnicodeConverter.p
  3.  
  4.      Contains:    Types, constants, and prototypes for Unicode Converter
  5.  
  6.      Version:    Technology:    Mac OS 8
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1994-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. }
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT UnicodeConverter;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __UNICODECONVERTER__}
  27. {$SETC __UNICODECONVERTER__ := 1}
  28.  
  29. {$I+}
  30. {$SETC UnicodeConverterIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33. {$IFC UNDEFINED __MACTYPES__}
  34. {$I MacTypes.p}
  35. {$ENDC}
  36. {$IFC UNDEFINED __TEXTCOMMON__}
  37. {$I TextCommon.p}
  38. {$ENDC}
  39. {$IFC UNDEFINED __MIXEDMODE__}
  40. {$I MixedMode.p}
  41. {$ENDC}
  42.  
  43.  
  44. {$PUSH}
  45. {$ALIGN MAC68K}
  46. {$LibExport+}
  47.  
  48. { Unicode conversion contexts: }
  49.  
  50. TYPE
  51.     TextToUnicodeInfo = ^LONGINT;
  52.     UnicodeToTextInfo = ^LONGINT;
  53.     UnicodeToTextRunInfo = ^LONGINT;
  54.     ConstTextToUnicodeInfo                = TextToUnicodeInfo;
  55.     ConstUnicodeToTextInfo                = UnicodeToTextInfo;
  56. { UnicodeMapVersion type & values }
  57.     UnicodeMapVersion                    = SInt32;
  58.  
  59. CONST
  60.     kUnicodeUseLatestMapping    = -1;
  61.     kUnicodeUseHFSPlusMapping    = 4;
  62.  
  63. { Types used in conversion }
  64.  
  65. TYPE
  66.     UnicodeMappingPtr = ^UnicodeMapping;
  67.     UnicodeMapping = RECORD
  68.         unicodeEncoding:        TextEncoding;
  69.         otherEncoding:            TextEncoding;
  70.         mappingVersion:            UnicodeMapVersion;
  71.     END;
  72.  
  73.     ConstUnicodeMappingPtr                = ^UnicodeMapping;
  74. { Control flags for ConvertFromUnicodeToText and ConvertFromTextToUnicode }
  75.  
  76. CONST
  77.     kUnicodeUseFallbacksBit        = 0;
  78.     kUnicodeKeepInfoBit            = 1;
  79.     kUnicodeDirectionalityBits    = 2;
  80.     kUnicodeVerticalFormBit        = 4;
  81.     kUnicodeLooseMappingsBit    = 5;
  82.     kUnicodeStringUnterminatedBit = 6;
  83.     kUnicodeTextRunBit            = 7;
  84.     kUnicodeKeepSameEncodingBit    = 8;
  85.     kUnicodeForceASCIIRangeBit    = 9;
  86.     kUnicodeNoHalfwidthCharsBit    = 10;
  87.  
  88.     kUnicodeUseFallbacksMask    = $00000001;
  89.     kUnicodeKeepInfoMask        = $00000002;
  90.     kUnicodeDirectionalityMask    = $0000000C;
  91.     kUnicodeVerticalFormMask    = $00000010;
  92.     kUnicodeLooseMappingsMask    = $00000020;
  93.     kUnicodeStringUnterminatedMask = $00000040;
  94.     kUnicodeTextRunMask            = $00000080;
  95.     kUnicodeKeepSameEncodingMask = $00000100;
  96.     kUnicodeForceASCIIRangeMask    = $00000200;
  97.     kUnicodeNoHalfwidthCharsMask = $00000400;
  98.  
  99. { Values for kUnicodeDirectionality field }
  100.     kUnicodeDefaultDirection    = 0;
  101.     kUnicodeLeftToRight            = 1;
  102.     kUnicodeRightToLeft            = 2;
  103.  
  104. { Directionality masks for control flags }
  105.     kUnicodeDefaultDirectionMask = $00;
  106.     kUnicodeLeftToRightMask        = $04;
  107.     kUnicodeRightToLeftMask        = $08;
  108.  
  109. { Control flags for TruncateForUnicodeToText: }
  110. {
  111.    Now TruncateForUnicodeToText uses control flags from the same set as used by
  112.    ConvertFromTextToUnicode, ConvertFromUnicodeToText, etc., but only
  113.    kUnicodeStringUnterminatedMask is meaningful for TruncateForUnicodeToText.
  114.    
  115.    Previously two special control flags were defined for TruncateForUnicodeToText:
  116.           kUnicodeTextElementSafeBit = 0
  117.           kUnicodeRestartSafeBit = 1
  118.    However, neither of these was implemented.
  119.    Instead of implementing kUnicodeTextElementSafeBit, we now use
  120.    kUnicodeStringUnterminatedMask since it accomplishes the same thing and avoids
  121.    having special flags just for TruncateForUnicodeToText
  122.    Also, kUnicodeRestartSafeBit is unnecessary, since restart-safeness is handled by
  123.    setting kUnicodeKeepInfoBit with ConvertFromUnicodeToText.
  124.    If TruncateForUnicodeToText is called with one or both of the old special control
  125.    flags set (bits 0 or 1), it will not generate a paramErr, but the old bits have no
  126.    effect on its operation.
  127. }
  128.  
  129. { Filter bits for filter field in QueryUnicodeMappings and CountUnicodeMappings: }
  130.     kUnicodeMatchUnicodeBaseBit    = 0;
  131.     kUnicodeMatchUnicodeVariantBit = 1;
  132.     kUnicodeMatchUnicodeFormatBit = 2;
  133.     kUnicodeMatchOtherBaseBit    = 3;
  134.     kUnicodeMatchOtherVariantBit = 4;
  135.     kUnicodeMatchOtherFormatBit    = 5;
  136.  
  137.     kUnicodeMatchUnicodeBaseMask = $00000001;
  138.     kUnicodeMatchUnicodeVariantMask = $00000002;
  139.     kUnicodeMatchUnicodeFormatMask = $00000004;
  140.     kUnicodeMatchOtherBaseMask    = $00000008;
  141.     kUnicodeMatchOtherVariantMask = $00000010;
  142.     kUnicodeMatchOtherFormatMask = $00000020;
  143.  
  144. { Control flags for SetFallbackUnicodeToText }
  145.     kUnicodeFallbackSequencingBits = 0;
  146.  
  147.     kUnicodeFallbackSequencingMask = $00000003;
  148.  
  149. { values for kUnicodeFallbackSequencing field }
  150.     kUnicodeFallbackDefaultOnly    = 0;
  151.     kUnicodeFallbackCustomOnly    = 1;
  152.     kUnicodeFallbackDefaultFirst = 2;
  153.     kUnicodeFallbackCustomFirst    = 3;
  154.  
  155.  
  156. { Caller-supplied entry point to a fallback handler }
  157.  
  158. TYPE
  159. {$IFC TYPED_FUNCTION_POINTERS}
  160.     UnicodeToTextFallbackProcPtr = FUNCTION(VAR iSrcUniStr: UniChar; iSrcUniStrLen: ByteCount; VAR oSrcConvLen: ByteCount; oDestStr: TextPtr; iDestStrLen: ByteCount; VAR oDestConvLen: ByteCount; iInfoPtr: LogicalAddress; iUnicodeMappingPtr: ConstUnicodeMappingPtr): OSStatus;
  161. {$ELSEC}
  162.     UnicodeToTextFallbackProcPtr = ProcPtr;
  163. {$ENDC}
  164.  
  165.     UnicodeToTextFallbackUPP = UniversalProcPtr;
  166.  
  167. CONST
  168.     uppUnicodeToTextFallbackProcInfo = $003FFFF0;
  169.  
  170. FUNCTION NewUnicodeToTextFallbackProc(userRoutine: UnicodeToTextFallbackProcPtr): UnicodeToTextFallbackUPP;
  171.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  172.     INLINE $2E9F;
  173.     {$ENDC}
  174.  
  175. FUNCTION CallUnicodeToTextFallbackProc(VAR iSrcUniStr: UniChar; iSrcUniStrLen: ByteCount; VAR oSrcConvLen: ByteCount; oDestStr: TextPtr; iDestStrLen: ByteCount; VAR oDestConvLen: ByteCount; iInfoPtr: LogicalAddress; iUnicodeMappingPtr: ConstUnicodeMappingPtr; userRoutine: UnicodeToTextFallbackUPP): OSStatus;
  176.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  177.     INLINE $205F, $4E90;
  178.     {$ENDC}
  179. { Function prototypes }
  180. {$IFC GENERATING68K AND NOT GENERATINGCFM }
  181. {
  182.       Routine to Initialize the Unicode Converter and cleanup once done with it. 
  183.       These routines must be called from Static Library clients.
  184. }
  185. FUNCTION InitializeUnicodeConverter(TECFileName: StringPtr): OSStatus;
  186. PROCEDURE TerminateUnicodeConverter;
  187. {  Note: the old names (InitializeUnicode, TerminateUnicode) for the above are still exported. }
  188. {$ENDC}
  189.  
  190. FUNCTION CreateTextToUnicodeInfo(iUnicodeMapping: ConstUnicodeMappingPtr; VAR oTextToUnicodeInfo: TextToUnicodeInfo): OSStatus;
  191. FUNCTION CreateTextToUnicodeInfoByEncoding(iEncoding: TextEncoding; VAR oTextToUnicodeInfo: TextToUnicodeInfo): OSStatus;
  192. FUNCTION CreateUnicodeToTextInfo(iUnicodeMapping: ConstUnicodeMappingPtr; VAR oUnicodeToTextInfo: UnicodeToTextInfo): OSStatus;
  193. FUNCTION CreateUnicodeToTextInfoByEncoding(iEncoding: TextEncoding; VAR oUnicodeToTextInfo: UnicodeToTextInfo): OSStatus;
  194. FUNCTION CreateUnicodeToTextRunInfo(iNumberOfMappings: ItemCount; {CONST}VAR iUnicodeMappings: UnicodeMapping; VAR oUnicodeToTextInfo: UnicodeToTextRunInfo): OSStatus;
  195. FUNCTION CreateUnicodeToTextRunInfoByEncoding(iNumberOfEncodings: ItemCount; {CONST}VAR iEncodings: TextEncoding; VAR oUnicodeToTextInfo: UnicodeToTextRunInfo): OSStatus;
  196. FUNCTION CreateUnicodeToTextRunInfoByScriptCode(iNumberOfScriptCodes: ItemCount; {CONST}VAR iScripts: ScriptCode; VAR oUnicodeToTextInfo: UnicodeToTextRunInfo): OSStatus;
  197. { Change the TextToUnicodeInfo to another mapping. }
  198. FUNCTION ChangeTextToUnicodeInfo(ioTextToUnicodeInfo: TextToUnicodeInfo; iUnicodeMapping: ConstUnicodeMappingPtr): OSStatus;
  199. { Change the UnicodeToTextInfo to another mapping. }
  200. FUNCTION ChangeUnicodeToTextInfo(ioUnicodeToTextInfo: UnicodeToTextInfo; iUnicodeMapping: ConstUnicodeMappingPtr): OSStatus;
  201.  
  202. FUNCTION DisposeTextToUnicodeInfo(VAR ioTextToUnicodeInfo: TextToUnicodeInfo): OSStatus;
  203. FUNCTION DisposeUnicodeToTextInfo(VAR ioUnicodeToTextInfo: UnicodeToTextInfo): OSStatus;
  204. FUNCTION DisposeUnicodeToTextRunInfo(VAR ioUnicodeToTextRunInfo: UnicodeToTextRunInfo): OSStatus;
  205. FUNCTION ConvertFromTextToUnicode(iTextToUnicodeInfo: TextToUnicodeInfo; iSourceLen: ByteCount; iSourceStr: ConstLogicalAddress; iControlFlags: OptionBits; iOffsetCount: ItemCount; VAR iOffsetArray: ByteOffset; VAR oOffsetCount: ItemCount; VAR oOffsetArray: ByteOffset; iOutputBufLen: ByteCount; VAR oSourceRead: ByteCount; VAR oUnicodeLen: ByteCount; oUnicodeStr: UniCharArrayPtr): OSStatus;
  206. FUNCTION ConvertFromUnicodeToText(iUnicodeToTextInfo: UnicodeToTextInfo; iUnicodeLen: ByteCount; iUnicodeStr: ConstUniCharArrayPtr; iControlFlags: OptionBits; iOffsetCount: ItemCount; VAR iOffsetArray: ByteOffset; VAR oOffsetCount: ItemCount; VAR oOffsetArray: ByteOffset; iOutputBufLen: ByteCount; VAR oInputRead: ByteCount; VAR oOutputLen: ByteCount; oOutputStr: LogicalAddress): OSStatus;
  207. FUNCTION ConvertFromUnicodeToTextRun(iUnicodeToTextInfo: UnicodeToTextRunInfo; iUnicodeLen: ByteCount; iUnicodeStr: ConstUniCharArrayPtr; iControlFlags: OptionBits; iOffsetCount: ItemCount; VAR iOffsetArray: ByteOffset; VAR oOffsetCount: ItemCount; VAR oOffsetArray: ByteOffset; iOutputBufLen: ByteCount; VAR oInputRead: ByteCount; VAR oOutputLen: ByteCount; oOutputStr: LogicalAddress; iEncodingRunBufLen: ItemCount; VAR oEncodingRunOutLen: ItemCount; VAR oEncodingRuns: TextEncodingRun): OSStatus;
  208. FUNCTION ConvertFromUnicodeToScriptCodeRun(iUnicodeToTextInfo: UnicodeToTextRunInfo; iUnicodeLen: ByteCount; iUnicodeStr: ConstUniCharArrayPtr; iControlFlags: OptionBits; iOffsetCount: ItemCount; VAR iOffsetArray: ByteOffset; VAR oOffsetCount: ItemCount; VAR oOffsetArray: ByteOffset; iOutputBufLen: ByteCount; VAR oInputRead: ByteCount; VAR oOutputLen: ByteCount; oOutputStr: LogicalAddress; iScriptRunBufLen: ItemCount; VAR oScriptRunOutLen: ItemCount; VAR oScriptCodeRuns: ScriptCodeRun): OSStatus;
  209. { Truncate a multibyte string at a safe place. }
  210. FUNCTION TruncateForTextToUnicode(iTextToUnicodeInfo: ConstTextToUnicodeInfo; iSourceLen: ByteCount; iSourceStr: ConstLogicalAddress; iMaxLen: ByteCount; VAR oTruncatedLen: ByteCount): OSStatus;
  211. { Truncate a Unicode string at a safe place. }
  212. FUNCTION TruncateForUnicodeToText(iUnicodeToTextInfo: ConstUnicodeToTextInfo; iSourceLen: ByteCount; iSourceStr: ConstUniCharArrayPtr; iControlFlags: OptionBits; iMaxLen: ByteCount; VAR oTruncatedLen: ByteCount): OSStatus;
  213. { Convert a Pascal string to Unicode string. }
  214. FUNCTION ConvertFromPStringToUnicode(iTextToUnicodeInfo: TextToUnicodeInfo; iPascalStr: Str255; iOutputBufLen: ByteCount; VAR oUnicodeLen: ByteCount; oUnicodeStr: UniCharArrayPtr): OSStatus;
  215. { Convert a Unicode string to Pascal string. }
  216. FUNCTION ConvertFromUnicodeToPString(iUnicodeToTextInfo: UnicodeToTextInfo; iUnicodeLen: ByteCount; iUnicodeStr: ConstUniCharArrayPtr; VAR oPascalStr: Str255): OSStatus;
  217. { Count the available conversion mappings. }
  218. FUNCTION CountUnicodeMappings(iFilter: OptionBits; iFindMapping: ConstUnicodeMappingPtr; VAR oActualCount: ItemCount): OSStatus;
  219. { Get a list of the available conversion mappings. }
  220. FUNCTION QueryUnicodeMappings(iFilter: OptionBits; iFindMapping: ConstUnicodeMappingPtr; iMaxCount: ItemCount; VAR oActualCount: ItemCount; VAR oReturnedMappings: UnicodeMapping): OSStatus;
  221. { Setup the fallback handler for converting Unicode To Text. }
  222. FUNCTION SetFallbackUnicodeToText(iUnicodeToTextInfo: UnicodeToTextInfo; iFallback: UnicodeToTextFallbackUPP; iControlFlags: OptionBits; iInfoPtr: LogicalAddress): OSStatus;
  223. { Setup the fallback handler for converting Unicode To TextRuns. }
  224. FUNCTION SetFallbackUnicodeToTextRun(iUnicodeToTextRunInfo: UnicodeToTextRunInfo; iFallback: UnicodeToTextFallbackUPP; iControlFlags: OptionBits; iInfoPtr: LogicalAddress): OSStatus;
  225.  
  226. {$ALIGN RESET}
  227. {$POP}
  228.  
  229. {$SETC UsingIncludes := UnicodeConverterIncludes}
  230.  
  231. {$ENDC} {__UNICODECONVERTER__}
  232.  
  233. {$IFC NOT UsingIncludes}
  234.  END.
  235. {$ENDC}
  236.